package com.itheima.d3_tcp.no1;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

//目标：掌握tcp服务端代码接收数据
public class ServerDemo01 {
    public static void main(String[] args) throws Exception {
        /**
         * ServerSocket(int port)：注册服务端端口
         * Socket accept()：等待接收客户端的Socket通信连接，连接成功返回Socket对象与客户端建立端到端通信
         */
        //1.创建ServerSocket对象，指定服务端程序的端口号
        ServerSocket server = new ServerSocket(10003);

        //2.调用ServerSocket对象的accept方法，去接收客户端的连接
        Socket socket = server.accept();

        //3.只要代码执行到这，说明已经有一个客户端和当前服务端建立了连接，连接就是socket对象
        //读取，获取字节输入流
        InputStream is = socket.getInputStream();
        //byte[] bys = new byte[1024];
        //int len = is.read(bys);

        //4.解码，从bys数组中的0号索引，解码len个字节
        //String msg = new String(bys, 0, len);

        //5.普通的字节流读取发送的文本字符数据比较麻烦，推荐用缓冲字符输入流
        //缓冲字符输入流需要提供字符输入流，但是is是字节流，需要将is转成字符输入流，用转换流
        InputStreamReader isr = new InputStreamReader(is);
        BufferedReader br = new BufferedReader(isr);

        //6.缓冲字符输入流，可以一次读取一行
        String msg = br.readLine();
        System.out.println(socket.getRemoteSocketAddress() + " 客户端发送的数据：" + msg);

        //释放资源
        //is.close();
        br.close();
        socket.close();
    }
}
